package com.shujia.exception_;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class ExceptionDemo3 {



    @Test
    public void test1() {

        try {
//            int num = 10;
//            System.out.println(1 / 0);

            String str = null;
            System.out.println(str.length());

            System.out.println("after");
        } catch (Exception e) {
            // num在try里面是局部变量
            // System.out.println(num);

            // 异常交由我们自己的代码处理, JVM不会处理
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        try {
//            String str = null;
//            System.out.println(str.length());

            System.out.println(1 / 0);

            // 代码块一旦出现异常, 会生成一个异常对象, 交由catch进行捕获
            InputStream is = new FileInputStream("D:\\bbb.txt");

        } catch (FileNotFoundException e) {
            /*
            同一个try catch结构里, catch 代码块只能捕获一次

            如果产生的异常时捕获异常类型的子类, 同样可以捕获成功
            顺序是从类异常的上面上往下捕获的

            如果捕获子类异常的代码写在父类捕获的下面, 会编译报错
            因为这个捕获子类异常的代码永远都不会执行
             */
            System.out.println("捕获到文件找不到异常");
        } catch (IOException e) {
            System.out.println("捕获IO异常");
        } catch (NullPointerException e) {
            /*
            IOException 和 NullPointerException没有继承关系
            那么他们编写的位置是没有要求, 可以任意存放
             */
            System.out.println("捕获到空指针异常");
        } catch (Exception e) {
            System.out.println("触发总的异常");
        }

    }
}
